/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.dao.implementaciones;

import desarrollosoft.ghce.dao.interfaces.IPacienteDAO;
import desarrollosoft.ghce.entidades.Paciente;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author ariel
 */
@Repository("pacienteDAO")
public class PacienteDAO implements IPacienteDAO {

    @PersistenceContext
    EntityManager entityManager;
    
    // ver el tema de usar namedQueries o cachear las querys como en el libro!!!
    
    @Override
    public List<Paciente> buscarActivosPorIdentificacion(String dato) {
        Query q = entityManager.createQuery(
                "SELECT p FROM Paciente p"
                        + " WHERE p.numeroIdentificacion LIKE CONCAT(:numeroIdentificacion,'%')"
                        + " ORDER BY p.numeroIdentificacion ASC"
        );
        q.setParameter("numeroIdentificacion", dato);
        return q.getResultList();
    }

    @Override
    public List<Paciente> buscarActivosPorApellido(String dato) {
        Query q = entityManager.createQuery(
                "SELECT p FROM Paciente p"
                        + " WHERE p.apellidos LIKE CONCAT('%',:apellidos,'%')"
                        + " ORDER BY p.apellidos ASC"
        );
        q.setParameter("apellidos", dato);
        return q.getResultList();
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void crearPaciente(Paciente paciente) {
        entityManager.persist(paciente);
    }

    @Override
    @Transactional(propagation = Propagation.MANDATORY)
    public void modificarPaciente(Paciente paciente) {
        entityManager.merge(paciente);
    }
    
}
